package com.wusiwei.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期工具类
 */
public class DateUtil {

    /**
     * 默认日期格式
     */
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

    /**
     * 默认日期时间格式
     */
    public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    /**
     * 默认时间格式
     */
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    /**
     * 日期格式化
     *
     * @param date   日期
     * @param format 格式
     * @return 格式化后的日期字符串
     */
    public static String format(Date date, String format) {
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }

    /**
     * 日期格式化，使用默认格式
     *
     * @param date 日期
     * @return 格式化后的日期字符串
     */
    public static String formatDate(Date date) {
        return format(date, DEFAULT_DATE_FORMAT);
    }

    /**
     * 日期时间格式化，使用默认格式
     *
     * @param date 日期
     * @return 格式化后的日期时间字符串
     */
    public static String formatDateTime(Date date) {
        return format(date, DEFAULT_DATETIME_FORMAT);
    }

    /**
     * 时间格式化，使用默认格式
     *
     * @param date 日期
     * @return 格式化后的时间字符串
     */
    public static String formatTime(Date date) {
        return format(date, DEFAULT_TIME_FORMAT);
    }

    /**
     * 字符串解析为日期
     *
     * @param dateStr 日期字符串
     * @param format  格式
     * @return 日期
     */
    public static Date parse(String dateStr, String format) {
        if (dateStr == null || dateStr.isEmpty()) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        try {
            return sdf.parse(dateStr);
        } catch (ParseException e) {
            throw new RuntimeException("日期解析异常", e);
        }
    }

    /**
     * 字符串解析为日期，使用默认格式
     *
     * @param dateStr 日期字符串
     * @return 日期
     */
    public static Date parseDate(String dateStr) {
        return parse(dateStr, DEFAULT_DATE_FORMAT);
    }

    /**
     * 字符串解析为日期时间，使用默认格式
     *
     * @param dateStr 日期时间字符串
     * @return 日期
     */
    public static Date parseDateTime(String dateStr) {
        return parse(dateStr, DEFAULT_DATETIME_FORMAT);
    }

    /**
     * 获取当前日期
     *
     * @return 当前日期
     */
    public static Date getCurrentDate() {
        return new Date();
    }

    /**
     * 获取当前日期字符串，使用默认格式
     *
     * @return 当前日期字符串
     */
    public static String getCurrentDateStr() {
        return formatDate(getCurrentDate());
    }

    /**
     * 获取当前日期时间字符串，使用默认格式
     *
     * @return 当前日期时间字符串
     */
    public static String getCurrentDateTimeStr() {
        return formatDateTime(getCurrentDate());
    }
} 